# utils/communication.py

import json
import time
from threading import Lock
from config import REQUEST_FILE, RESPONSE_FILE

"""
通信模块：通过读写JSON文件与Java后端交互
要求：
- 写入请求文件
- 等待响应文件写入
- 读取响应文件内容
- 清理响应文件，避免重复读取

用简单的文件锁防止并发读写问题（多线程下安全）
"""

_file_lock = Lock()

def send_request(request_data, timeout=5):
    """
    发送请求并等待响应
    参数:
        request_data: dict 要发送的请求JSON对象
        timeout: 等待响应的最长时间（秒）
    返回:
        响应JSON对象（dict），超时返回None
    """
    with _file_lock:
        # 写请求文件,with防止文件未关闭导致的并发问题
        with open(REQUEST_FILE, "w", encoding="utf-8") as f:
            #将字典序列化写入json
            json.dump(request_data, f, ensure_ascii=False, indent=2)

        # 打开response并等待Java后端写入响应
        start_time = time.time()#记录当前时间，用于判断是否超过最大延时
        while True:
            try:
                with open(RESPONSE_FILE, "r", encoding="utf-8") as f:
                    #将文件内容读成字符串
                    content = f.read()
                    #去除字符串空白内容，判断字符串是否为空
                    if content.strip():
                        #将json字符串转换为字典
                        response = json.loads(content)
                        # 清空响应文件
                        with open(RESPONSE_FILE, "w", encoding="utf-8") as fw:
                            fw.write("")
                        return response
            except Exception:
                pass

            if time.time() - start_time > timeout:
                return None  # 超时
            time.sleep(0.1)
